#include "ArchivoTablasHash.h"

ArchivoTablasHash::ArchivoTablasHash(string path): ArchivoDeEstructurasVariables(path){

}

/* El archivo solo tiene un registro que se actualiza con regularidad
 * Actualiza en el mismo lugar que le pasan, sobreescribe */
unsigned int ArchivoTablasHash::modificar(IEntidad* entidad,unsigned int posicionEnElArchivo){

        char* buffer = entidad->construirBuffer();
        int tamanioDelBuffer = entidad->getTamanioDelBuffer();
        unsigned int posicionDeEscritura = 0;
        stringstream* ss = new stringstream(stringstream::in | stringstream::out | stringstream::binary);

        //escribo primero el tama�o total de la entidad
        ss->write((char*)&tamanioDelBuffer,sizeof(int));

        //y luego a la entidad
        ss->write(buffer, tamanioDelBuffer);

        abrirArchivo();

        archivo.seekp(posicionEnElArchivo,ios::beg);
        posicionDeEscritura = archivo.tellp();
        archivo.write(ss->str().c_str(),tamanioDelBuffer + sizeof(int));

        cerrarArchivo();

        delete ss;
        delete [] buffer;
        return posicionDeEscritura;

}

void ArchivoTablasHash::actualizarTabla(IEntidad* entidad ){

//Actualizo la tabla, siempre actualizo la posicion 0
//Unica entidad que guarda el archivo
      
	  int posicion = this->modificar(entidad,0);
}

int ArchivoTablasHash::getTamanio(){
		abrirArchivo();
        archivo.seekp(0, ios::end);
        int fin = archivo.tellp();
		cerrarArchivo();
		return fin;
}



ArchivoTablasHash::~ArchivoTablasHash() {
}
